package net.wanho.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanho.dto.InStoreDTO;
import net.wanho.mapper.InStoreMapper;
import net.wanho.mapper.OutStoreMapper;
import net.wanho.po.InStore;
import net.wanho.po.OutStore;
import net.wanho.service.InStoreService;
import net.wanho.util.ThreadUtil;
import net.wanho.vo.InStoreVo;
import net.wanho.vo.PageInfo;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
* @author Administrator
* @description 针对表【in_store(入库单表)】的数据库操作Service实现
* @createDate 2025-04-28 11:41:58
*/
@Service
public class InStoreServiceImpl extends ServiceImpl<InStoreMapper, InStore>
    implements InStoreService{
    private final OutStoreMapper OutStoreMapper;

    public InStoreServiceImpl(net.wanho.mapper.OutStoreMapper outStoreMapper) {
        OutStoreMapper = outStoreMapper;
    }

    @Override
    public PageInfo<InStoreVo> findPageList(Integer pageNum, Integer pageSize, InStoreDTO inStoreDTO) {
        Page<InStoreVo> page = new Page<>(pageNum,  pageSize);
        QueryWrapper<InStoreVo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(!ObjectUtil.isEmpty(inStoreDTO.getStoreId()), "store_id", inStoreDTO.getStoreId());
        queryWrapper.like(!ObjectUtil.isEmpty(inStoreDTO.getProductName()), "product_name", inStoreDTO.getProductName());
        queryWrapper.eq(!ObjectUtil.isEmpty(inStoreDTO.getIsOut()), "is_out", inStoreDTO.getIsOut());
        queryWrapper.between(!ObjectUtil.isEmpty(inStoreDTO.getStartTime()), "in_time", inStoreDTO.getStartTime(), inStoreDTO.getEndTime());
        Page<InStoreVo> p = baseMapper.selectListByPage(page, queryWrapper);
        PageInfo<InStoreVo> pageInfo = new PageInfo<>();
        pageInfo.setPageNum(page.getCurrent());
        pageInfo.setPageSize(page.getSize());
        pageInfo.setTotalNum(page.getTotal());
        pageInfo.setPageCount(page.getPages());
        pageInfo.setLimitIndex(page.offset());
        pageInfo.setResultList(p.getRecords());
        return pageInfo;
    }

    @Override
    public void instoreConfirm(InStore inStore) {
        inStore.setIsIn(1);
        baseMapper.updateById(inStore);
        OutStore  outStore = new OutStore();
        outStore.setStoreId(inStore.getStoreId());
        outStore.setIsOut("0");
        outStore.setProductId(inStore.getProductId());
        outStore.setOutNum(inStore.getInNum());
        outStore.setCreateBy(ThreadUtil.getId());
        outStore.setCreateTime(new Date());
        QueryWrapper<OutStore> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(!ObjectUtil.isEmpty(outStore.getStoreId()),"store_id", outStore.getStoreId());
        queryWrapper.eq(!ObjectUtil.isEmpty(outStore.getProductId()),"product_id", outStore.getProductId());
        queryWrapper.eq(!ObjectUtil.isEmpty(outStore.getIsOut()),"is_out", outStore.getIsOut());
        if (OutStoreMapper.selectOne(queryWrapper) != null) {
            outStore.setOutNum(outStore.getOutNum() + OutStoreMapper.selectOne(queryWrapper).getOutNum());
            OutStoreMapper.update(outStore, queryWrapper);
        }else
            OutStoreMapper.insert(outStore);
    }
}




